const express = require("express")
// 导入mysql函数
const exsql =  require("../utils/mysql")

// 创建路由
const Router = express.Router()

// 上传文件
const multer = require("multer")



//查询所有英雄
Router.get("/",(request,response)=>{
    // 执行sql语句
    let sql = "SELECT * FROM heroname";
    exsql(sql,(result)=>{
        //如果result 返回的是空值，合理ok 打印出来的是【】
        response.send({code:200,msg:"获取成功",data:result})
    })
})


//查询单个英雄
// 合法性校验
// 1 可能对id做判断  id 是不是数字类型  判断是不是数字类型 。。  string 。。
// 2 假设 根据id找不到那个数据 需要返回些什么给前端 
// 2.1 404 状态 
// 2.2 提示信息即可 
Router.get("/:id",(request,response)=>{
    // console.log(request.params)
    const {id} = request.params
    let sql = `SELECT * FROM heroname WHERE ID = ${id} `
    exsql(sql,(result)=>{
    //   判断一下是否能找到数据
    if(result.length){
        response.send({msg:"查询成功",data:result[0]})
    }else{
        response.status(404)
        response.send({msg:"请检查参数id是否正确"})
    }
    })
})

//更新英雄
Router.put("/:id",(request,response)=>{
    const {id} = request.params;
    const {name,gender,img} = request.body;
    let querysql = `SELECT * FROM heroName WHERE id = ${id}`;
    // 先查询数据库是不是有这个id数据的值
    exsql(querysql,result=>{
        if(result.length){
            // 有数据  执行更新操作
            console.log("=========================================")
            let sql = "UPDATE heroname set";
            for (const key in request.body) {
              const temSql = ` ${key} = '${request.body[key]}', `;
              sql += temSql;
            }
            sql += `WHERE id = ${id}`;
      
            const arrey = sql.split("");
            //   获取最后的含有，的下标 //61
            const index = arrey.lastIndexOf(",");
            console.log(index);
            //splice用来删除指定元素位置的数据
            arrey.splice(index, 1);
            sql = arrey.join("");
  
            exsql(sql,(result2)=>{
                response.status(201)
                response.send({msg:"更新成功"})      
            })
            console.log("=========================================")        
        }else{
            response.status(404)
            response.send({msg:"您要更新的数据不存在，请检查id后重试"})
        }
    })
})




//删除英雄
Router.delete("/:id",(request,response)=>{
    const {id} = request.params
   
    let querysql = `SELECT * FROM heroname WHERE id = ${id}`
    exsql(querysql,(result)=>{
        // 先查询数据库是不是存在这个id的值
        //存在
        if(result.length){
            // 执行删除数据
            let sql = `DELETE from heroname WHERE id = ${id}`
            exsql(sql,(result2)=>{
                // 删除成功
                response.status(204)
                response.send({code:204,msg:"删除成功"})
            })
        }else{
           response.status(404);
           response.send({msg:"您要删除的数据不存在，请检查id后重试"}) 
        }
    }) 
})



//新增英雄
Router.post("/",(request,response)=>{
    console.log(request.body)
    const {name,gender="",img=""} = request.body
    
    // 判断name有没有值？ name 是必填属性
    if(!name){
        //不存在时
        response.status(422)
        response.send({msg:"请检查name参数是否正确"})
        // 结束代码，不让其执行
        return;
    }
   
    // 判断一下 当前的name 是否在数据库中已经存在  返回提示 即可 
   // select * from hero where name = name
   const querysql = `SELECT * FROM heroname where name = '${name}'` 
   exsql(querysql,(result)=>{
    //如果能查询到数据，说明数据库中存在有这个名字
     if(result.length){
      response.send({msg:"数据库中已经存在相同的name，请修改后重试"})
     }else{
       let sql = `INSERT INTO heroName (name,gender,img) values ('${name}','${gender}','${img}')`
       exsql(sql,(result)=>{
        response.status(201)
        response.send({code:201,msg:`新增成功,该英雄id为${result.insertId}`})
   })    
     }
   }) 
})


// 自定义文件后缀
const storage = multer.diskStorage({
    destination:function(req,file,cb){
        cb(null,'uploads')
    },
    filename:function(req,file,cb){
        const uniquesSuffix = Date.now() + "-" + Math.round(Math.random() * 1E9);
        const index = file.originalname.lastIndexOf(".");
        const extName = file.originalname.substr(index);
        cb(null,file.fieldname + "-"+uniquesSuffix+extName)
    }
})

const upload = multer({ storage })

// 文件上传
Router.post("/avatar",upload.single('avatar'),(request,response)=>{
    let src = `http://localhost:4555/${request.file.filename}`
    response.send({msg:"上传成功",src})
})

// 导出路由
module.exports = Router


